/**
 * @description product 控制层
 * @author LI
 */

const {
  createProduct,
  getProductList,
  updateProductById,
  deleteProductById
} = require('../services/product')
const { ReturnResult } = require('../model/ResultModel')

/**
 * 添加商品产品信息
 * @param {number} goodsInfoId 商品信息 id
 * @param {number} goodsPhotoId 对应商品图片里面的 id
 * @param {string} productSn 产品编号
 * @param {string} productName 产品名称
 * @param {number} productNumber 产品数量
 * @param {number} productPrice 产品单价
 * @param {string} productUnit 产品单位
 * @param {string} photoCoordinate 图片锚点的坐标
 * @param {string} photoDirect 图片锚点图形的说明
 * @param {string} productLink 产品链接
 * @param {string} productRemark 产品备注
 */
async function addProduct({
  goodsInfoId,
  goodsPhotoId,
  productSn,
  productName,
  productNumber,
  productPrice,
  productUnit,
  photoCoordinate,
  photoDirect,
  productLink,
  productRemark,
}) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await createProduct({
      goodsInfoId,
      goodsPhotoId,
      productSn,
      productName,
      productNumber,
      productPrice,
      productUnit,
      photoCoordinate,
      photoDirect,
      productLink,
      productRemark,
    })
    return new ReturnResult(0, null, true, "添加成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "添加失败，请重试")
  }
}

/**
 * 获取全部商品产品信息
 * @param {number} id 商品图片 id
 * @param {string} productSn 产品编号
 * @param {string} productName 产品名称
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getProductAll({ id, productSn, productName, page, limit }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await getProductList({
      id,
      productSn,
      productName,
      page,
      limit,
    })
    return new ReturnResult(result.count, result.rows, true, "查询成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "查询失败，请重试")
  }
}

/**
 * 更新商品产品信息
 * @param {number} id 商品产品 id
 * @param {string} productName 产品名称
 * @param {number} productNumber 产品数量
 * @param {number} productPrice 产品单价
 * @param {string} productUnit 产品单位
 * @param {string} photoCoordinate 图片锚点的坐标
 * @param {string} photoDirect 图片锚点图形的说明
 * @param {string} productLink 产品链接
 * @param {string} productRemark 产品备注
 */
async function updateProduct({
  id,
  productName,
  productNumber,
  productPrice,
  productUnit,
  photoCoordinate,
  photoDirect,
  productLink,
  productRemark,
}) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await updateProductById({
      id,
      productName,
      productNumber,
      productPrice,
      productUnit,
      photoCoordinate,
      photoDirect,
      productLink,
      productRemark,
    })
    return new ReturnResult(0, null, true, "更新成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "更新失败，请重试")
  }
}

/**
 * 删除商品项目信息
 * @param {number} id id
 */
async function deleteProduct(id) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await deleteProductById(id)
    return new ReturnResult(0, null, true, "删除成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "删除失败，请重试")
  }
}

module.exports = {
  addProduct,
  getProductAll,
  updateProduct,
  deleteProduct
}
